import { defineWrappedResponseHandler } from "#server/utils/handler"; import { R } from "#server/utils/response"; import { resolveCharacterIdentity } from "#server/service/character/identity"; import { createCharacterSession, saveCharacterMessage } from "#server/service/character/session"; import { generateTempToken, setTempTokenCookie, getTempTokenTtlMs, } from "#server/service/agent/temp-token"; import { getConfigUser, getConfigGlobal } from "#server/utils/context"; import { getCharacterCardBySlug } from "#server/service/character/character-card"; export default defineWrappedResponseHandler(async (event) => { const slug = getRouterParam(event, "slug"); if (!slug) { return R.error("参数无效", null); } const card = await getCharacterCardBySlug(slug); if (!card) { return R.error("角色不存在", null); } const identity = await resolveCharacterIdentity(event); let tempToken: string | null = null; let expiresAt: Date | null = null; if (!identity.userId && !identity.tempToken) { tempToken = generateTempToken(); expiresAt = new Date(Date.now() + getTempTokenTtlMs()); setTempTokenCookie(event, tempToken); } else if (!identity.userId && identity.tempToken) { tempToken = identity.tempToken; expiresAt = new Date(Date.now() + getTempTokenTtlMs()); } let modelId: number | null = null; if (identity.userId) { const preferred = await getConfigUser(event, "preferredLlmModelId"); if (preferred && preferred > 0) { modelId = preferred; } } if (!modelId && card.defaultModelId) { modelId = card.defaultModelId; } if (!modelId) { const globalDefault = await getConfigGlobal("agentDefaultModelId"); if (globalDefault && globalDefault > 0) { modelId = globalDefault; } } const session = await createCharacterSession({ userId: identity.userId, tempToken, cardId: card.id, modelId, expiresAt, }); // 开场白:创建会话时自动写入角色的首条消息 let greeting = null; const firstMessage = card.firstMessage?.trim(); if (firstMessage) { greeting = await saveCharacterMessage({ sessionId: session.id, role: "assistant", content: firstMessage, sortOrder: 1, }); } return R.success({ session, greeting }); });